package com.nd.android.musicboxlibrary.business.comm;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * 异常类封装
 * 
 * @author 慕容秋 (muroqiu@sina.com)
 */
public class NdException extends Exception implements MagicNumber {
    private static final long serialVersionUID = -8618791505361792493L;

    private int mCode = 0;

    /**
     * 手机号码格式不对
     */
    public static int SID_INVALID = n107100446;

    /**
     * Creates a new instance of NdException. <br>
     * Created 2014年9月16日 上午12:16:12
     * 
     * @param cause
     *            异常原因
     */
    public NdException(Exception cause) {
        super(cause instanceof JSONException ? "数据解析错误" : cause.getMessage());
        if (cause instanceof NdException) {
            mCode = ((NdException) cause).getCode();
        }
    }

    /**
     * Creates a new instance of NdException. <br>
     * Created 2014年9月16日 上午12:16:15
     * 
     * @param message
     *            异常原因
     */
    public NdException(String message) {
        super(message);
    }

    /**
     * Creates a new instance of NdException. <br>
     * Created 2014年9月16日 上午12:16:17
     * 
     * @param json
     *            异常描述
     */
    public NdException(JSONObject json) {
        super(json.optString("msg"));
        mCode = json.optInt("code");
    }

    /**
     * Creates a new instance of NdException. <br>
     * Created 2014年9月16日 上午12:16:20
     * 
     * @param code
     *            异常代码
     * @param message
     *            异常描述
     */
    public NdException(int code, String message) {
        super(message);
        mCode = code;
    }

    /**
     * 返回异常代码
     * 
     * @return int
     */
    public int getCode() {
        return mCode;
    }

    /**
     * 返回异常的简明信息
     * 
     * @return String
     */
    public String getSimpleMsg() {
        if (mCode == n500) {
            return "请求资源不存在";
        }
        String msg = this.getMessage();
        if (msg != null && msg.startsWith("400")) {
            int pos = msg.indexOf(":");
            if (pos > 0) {
                return msg.substring(pos + 1);
            }
        }
        if (msg != null && msg.startsWith("{")) {
            try {
                JSONObject jsonMsg = new JSONObject(msg);
                if (jsonMsg != null) {
                    JSONObject jsonErr = jsonMsg.optJSONObject("error");
                    if (jsonErr != null) {
                        return jsonErr.optString("msg");
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
                return "数据解析错误";
            }
        }
        // 临时屏蔽详情
        // if (!GlobalSetting.IS_DEBUG) {
        // msg = "业务处理失败";
        // }
        return msg;
    }
    
    /**
     * 
     * <br>Created 2014年11月28日 上午12:05:46
     * @author       wat.ztag
    */
    @Override
    public void initMagicNumber() {
    }

}
